미니배치(Minibatch) 생성과정

AI 모델을 초고속으로 학습시키는 GPU는 반듯하게 정렬된 숫자 블록(텐서)만 이해하고 처리할 수 있습니다. 하지만 우리가 다루는 텍스트는 문장마다 길이가 제각각인, 불규칙한 데이터의 연속입니다.
이 둘 사이의 간극을 메우는 기술이 바로 미니배치 생성 과정입니다.

1. 텍스트를 숫자로 변환하기

1단계 :
텍스트를 숫자 리스트로 변환

가장 먼저 해결할 문제는 "글자를 어떻게 숫자로 바꾸는가?"입니다.
GPU는 '사과'라는 글자를 직접 이해하지 못하므로, 우리는 일종의 '단어-숫자 번역사전(Vocabulary)'을 만듭니다.

단어장 생성 및 인덱싱

텍스트에 있는 모든 고유 단어(토큰)를 모아 번호표를 붙여 단어장을 생성한 뒤, 이 단어장을 기준으로 문장을 숫자들의 나열(리스트)로 바꿉니다.

단어장
{'<pad>': 0, '나': 1, '는': 2, '사과': 3, '를': 4, ...}
인덱싱
['나', '는', '사과', '를'] → [1, 2, 3, 4]

2. 숫자 리스트를 텐서로 결합하기

2단계 :
길이를 통일하여 텐서(Tensor)로 결합

이제 모든 문장이 숫자 리스트로 바뀌었지만, 아직 "문장마다 길이가 다르다"는 문제가 남아있습니다.
길이가 다른 리스트들은 GPU가 한 번에 처리할 수 있는 반듯한 직사각형 형태로 쌓을 수 없습니다.

패딩(Padding)

한 묶음(미니배치) 내에서 가장 긴 문장을 기준으로,
나머지 짧은 문장들의 뒷부분을 의미 없는 특별 토큰 <pad>의 인덱스(0)로 채워 길이를 똑같이 맞춥니다.

패딩 적용 전
[1, 2, 3, 4] (길이 4)
[1, 5, 6] (길이 3) 패딩 적용 후
[1, 2, 3, 4]
[1, 5, 6, 0]

이제 길이가 같아진 숫자 리스트들을 차곡차곡 쌓으면,
GPU가 원하는 최종 데이터 형태인 텐서(Tensor), 즉 미니배치가 완성됩니다.


3. 왜 미니배치를 사용하는가?

계산 효율성과 학습 안정성

미니배치(Minibatch)는 전체 학습 데이터셋을 여러 개의 작은 묶음으로 나눈 것입니다.
이렇게 데이터를 쪼개서 사용하는 이유는 크게 계산 효율성학습 안정성 두 가지입니다.

계산 효율성 (Computational Efficiency)

여러 개의 데이터 샘플(벡터)을 하나의 미니배치(행렬/텐서)로 묶어서 전달하면,
GPU는 병렬 처리를 통해 훨씬 빠른 속도로 연산을 수행할 수 있습니다.

학습 안정성 (Training Stability)

모델은 데이터의 예측 오차(그래디언트)를 기반으로 학습합니다.
미니배치는 이 오차 계산에서 다음과 같은 장점을 가집니다.

  • 데이터 1개만 사용
    기울기가 불안정하고 노이즈가 심해, 학습 방향이 크게 흔들릴 수 있습니다.
  • 전체 데이터 사용
    기울기는 가장 정확하지만, 계산에 많은 시간과 메모리가 소요됩니다.
  • 미니배치 사용
    전체 데이터 기울기에 대한 효율적인 근사치(approximation) 역할을 합니다. 빠른 속도와 안정적인 학습 방향이라는 두 마리 토끼를 모두 잡는 가장 현실적인 방법입니다.

4. 전체 프로세스 요약

자연어 처리 기본 파이프라인

미니배치가 전체 과정에서 어디에 위치하는지 큰 그림으로 이해해 봅시다.

  1. 데이터 수집
    모델 학습에 필요한 텍스트 데이터를 수집합니다.
  2. 텍스트 전처리
    수집한 텍스트에서 불필요한 기호, 오탈자 등을 제거하고 정제합니다.
  3. 벡터화 (Vectorization)
    정제된 텍스트를 토큰화하고, 인덱싱패딩 과정을 거쳐 모델이 이해할 수 있는 숫자 텐서로 변환합니다.
  4. 모델 학습 (Model Training)
    벡터화된 데이터를 모델에 입력하여 가중치를 업데이트하며 학습을 진행합니다.
  5. 모델 평가 및 배포
    학습된 모델의 성능을 평가하고, 실제 서비스에 적용합니다.

⭐ 미니배치의 역할

바로 이 4. 모델 학습 단계에서, 전체 데이터셋을 GPU가 한 번에 처리할 수 있는 작은 묶음,
미니배치로 나누어 모델에 순서대로 주입합니다.
모델은 미니배치 하나를 처리할 때마다 가중치를 한 번씩 업데이트합니다.